import {getStorageSync, removeStorageSync, setStorageSync} from "../utils/storage";
import {simpleGet, simplePost} from "../utils/request";
import {getLoginCode, showToast, showToastError, showToastSuccess} from "../utils/tool";

// export const getLoginUser = (refresh=false, options={}) => {
//     const {app} = options
//     const _app = getApp() || app
//
//     return new Promise(async resolve => {
//         // 判断是否登录，如果没有登录，一律返回空
//         const isLogin = checkLogin()
//         if (!isLogin){
//             resolve(null)
//             return;
//         }
//         // 接下来是已经登录的功能
//         const _user = _app.globalData.user
//
//         if (_user && !refresh){ // 全局变量存在用户信息，直接返回
//             // _app.globalData.getLoginUserComplete = true
//             resolve(_user)
//
//         }else { // 向后台请求
//
//             console.log("getloginuser", _app.globalData.getLoginUserComplete)
//
//             if (_app.globalData.getLoginUserComplete){  // 请求完成，没有正在执行的请求
//                 // 修改请求状态
//                 _app.globalData.getLoginUserComplete = false
//                 simpleGet("/user/info").then(({info}) => {
//                     // 存入global
//                     _app.globalData.user = info
//                     if (info){
//                         _app.globalData.cartNum = info.cartNum
//                     }else {
//                         _app.globalData.cartNum = 0
//                         // 退出登录
//                         removeLogin()
//                     }
//
//                     resolve(info)
//
//                 }).finally(() => {
//                     // 不论请求是否成功，只要请求完成，都修改请求状态
//                     _app.globalData.getLoginUserComplete = true
//                 })
//
//             }else{  // 有正在执行的请求，延时3秒后再次执行
//                 setTimeout( function(){
//                     return getLoginUser(options)
//                 }, 3000);
//             }
//
//         }
//
//     })
//
// }


export const getLoginUser = (refresh=false, options={}) => {
    const {app} = options
    const _app = getApp() || app

    return new Promise(async resolve => {
        // 判断是否登录，如果没有登录，一律返回空
        const isLogin = checkLogin()
        if (!isLogin){
            resolve(null)
            return;
        }
        // 接下来是已经登录的功能
        const _user = _app.globalData.user

        if (_user && !refresh){ // 全局变量存在用户信息，直接返回
            // _app.globalData.getLoginUserComplete = true
            resolve(_user)

        }else { // 向后台请求

            simpleGet("/user/info").then(({info}) => {
                // 存入global
                _app.globalData.user = info
                if (info){
                    _app.globalData.cartNum = info.cartNum
                }else {
                    _app.globalData.cartNum = 0
                    // 退出登录
                    removeLogin()
                }

                resolve(info)

            })

        }

    })

}


// 获取当前登录用户的openid（如果用户是使用手机号登录，不使用用户信息里存储的openid，使用当前登录用户的openid）
export const getLoginOpenid = () => {
    return new Promise(resolve => {

        const openid = getStorageSync("loginOpenid")
        if (openid){
            resolve(openid)
        }else{
            getLoginCode().then(code => {
                simpleGet("/public/getWxMpSession", {code}).then(r => {
                    setStorageSync("loginOpenid", r.openid)
                    resolve(r.openid)
                })
            })
        }


    })
}


export const checkLogin = () => {
    return getStorageSync("loginToken") ? true : false
}

export const getLoginToken = () => {
    return getStorageSync("loginToken")
}

export const setLoginToken = (token) => {
    setStorageSync("loginToken", token)
}

export const removeLogin = () => {
    removeStorageSync("loginToken")
}

export const logout = () => {
    const app = getApp()
    // 将用户信息置空
    app.globalData.user = null
    app.globalData.cartNum = null
    // 删除登录token标记
    removeLogin()
    // 删除openid
    removeStorageSync("loginOpenid")
}

export const toLogin = (redirect='') => {
    if (!checkLogin()){
        let url = `/pages/login/index`
        if (redirect){
            url += `?redirect=${redirect}`
        }
        wx.navigateTo({
            url,
        })
    }
}
